package com.qijian.mold.service;

import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.qijian.mold.domain.param.mold.GetMoldParam;
import com.qijian.mold.domain.param.moldChange.ConfirmMoldChangParam;
import com.qijian.mold.domain.param.moldChange.CreateMoldChangeParam;
import com.qijian.mold.domain.param.moldChange.SelectMoldChangeParam;
import com.qijian.mold.domain.param.moldChange.WorkshopConfirmMoldChangParam;
import com.qijian.mold.domain.param.task.*;
import com.qijian.mold.domain.vo.mold.MoldDetailsVo;
import com.qijian.mold.domain.vo.task.*;
import com.qijian.mold.domain.vo.user.UserDetailsVo;

import java.util.List;

/**
 * 换模任务
 *
 * @author anni.zhu
 * @author anni.zhu@king-v.com
 * Created in 2025/3/29 17:25
 */
public interface MoldChangeTaskService {

    /**
     * 创建上模任务
     * @param param
     */
    void saveUp(CreateUpTaskParam param);

    /**
     * 创建下模任务
     * @param param
     */
    void saveDown(CreateDownTaskParam param);

    /**
     * 移交任务
     * @param param
     */
    void turnOverTask(TurnOverTaskParam param);

    /**
     * 移交任务
     * @param param
     */
    void turnOverTaskVisible(TurnOverTaskParam param);

    /**
     * 技术工修改任务的操作员，以及在最新日志记录选择的操作员
     * @param param
     */
    void updateUserTask(UpdateTaskUserParam param);

    /**
     * 删除上模任务
     * @param taskId
     */
    void deleteUpTask(Long taskId);

    /**
     * 删除下模任务
     * @param taskId
     */
    void deleteDownTask(Long taskId);

    /**
     * 删除换模申请
     * @param moldChangeId
     */
    void deleteMoldChange(Long moldChangeId);

    /**
     * 获取所有空闲的模具
     * @return
     */
    Page<MoldDetailsVo> getMoldList(GetMoldParam param);

    /**
     * 根据模具id获取模具状态信息
     * @param moldId
     * @return
     */
    MoldDetailsVo getMoldStatusById(Long moldId);

    /**
     * 根据设备id获取关联的模具
     * @param eqpId
     * @return
     */
    List<MoldDetailsVo> getMoldListByEqpId(Long eqpId);

    /**
     * 确认完成上模任务
     * @param param
     */
    void completeUpTask(CompleteUpTaskParam param);

    /**
     * 确认完成下模任务
     * 下模任务变成已完成
     * @param param
     */
    void completeDownTask(CompleteUpTaskParam param);

    /**
     * 开始调试上模任务
     */
    void debugStartUpTask(Long taskId);

    /**
     * 结束调试上模任务
     * 上模任务变成已完成
     * @param param
     */
    void debugCompleteUpTask(CompleteUpTaskParam param);

    /**
     * 获取任务详情
     * @param taskId
     * @return
     */
    TaskDetailsVo getTaskDetails(Long taskId);

    /**
     * 获取任务列表分页
     * @param param
     * @return
     */
    Page<TaskListVo> selectByPage(SelectTaskParam param);

    /**
     * 操作员确认的时候选择的用户数据-根据任务id获取操作员
     * @param taskId
     * @return
     */
    List<UserDetailsVo> getUserListByTaskId(Long taskId);

    /**
     * 移交的时候选择的用户数据-根据任务id获取不在该任务下的操作员
     * @param taskId
     * @return
     */
    List<UserDetailsVo> getUserListByTurnOver(Long taskId);

    /**
     * 1-4-5的时候选择的用户数据-根据申请单id获取所有的上模人员和下模人员
     * @param moldChangeId
     * @return
     */
    List<UserDetailsVo> getUserListByDebugOver(Long moldChangeId);


}
